package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ITransferAccountsPeopleDAO;
import org.jsola.hr.dto.TransferAccountsPeopleAddDTO;
import org.jsola.hr.dto.TransferAccountsPeopleH5AddDTO;
import org.jsola.hr.dto.TransferAccountsPeopleUpdateDTO;
import org.jsola.hr.entity.TransferAccountsPeopleDO;
import org.jsola.hr.query.TransferAccountsPeopleQuery;
import org.jsola.hr.vo.TransferAccountsPeopleListVO;
import org.jsola.hr.vo.TransferAccountsPeoplePasteVO;
import org.jsola.hr.vo.TransferAccountsPeopleVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 转账人员库
 *
 * @author zhr
 */
public interface ITransferAccountsPeopleService extends IService<ITransferAccountsPeopleDAO, TransferAccountsPeopleDO> {

    /**
     * 新增转账人员库
     * @param transferAccountsPeopleAddDTO 新增转账人员库DTO
     * @param tokenUser 当前用户
     * @return 转账人员库详情信息
     */
    TransferAccountsPeopleVO save(TransferAccountsPeopleAddDTO transferAccountsPeopleAddDTO, TokenUser tokenUser);

    /**
     * 修改转账人员库
     * @param transferAccountsPeopleUpdateDTO 修改转账人员库DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(TransferAccountsPeopleUpdateDTO transferAccountsPeopleUpdateDTO, TokenUser tokenUser);

    /**
     * 修改转账人员库
     * @param transferAccountsPeopleDO 修改转账人员库DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int updateDO(TransferAccountsPeopleDO transferAccountsPeopleDO, TokenUser tokenUser);


    /**
     * 批量删除转账人员库，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param transferAccountsPeopleIds 转账人员库id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...transferAccountsPeopleIds);

    /**
     * 根据转账人员库id查找
     * @param transferAccountsPeopleId 转账人员库id
     * @param siteId 所属站点id
     * @return 转账人员库详情信息
     */
    TransferAccountsPeopleVO selectById(String transferAccountsPeopleId, String siteId);

    /**
     * 查询转账人员库
     * @param transferAccountsPeopleQuery 查询条件
     * @param siteId 所属站点id
     * @return 转账人员库列表信息
     */
    List<TransferAccountsPeopleListVO> select(TransferAccountsPeopleQuery transferAccountsPeopleQuery, String siteId);

    /**
    * 查询转账人员库记录数
    * @param transferAccountsPeopleQuery 查询条件
    * @param siteId 所属站点id
    * @return 转账人员库记录数
    */
    int selectCount(TransferAccountsPeopleQuery transferAccountsPeopleQuery, String siteId);

    /**
     * 分页查询转账人员库
     * @param transferAccountsPeopleQuery 查询条件
     * @param siteId 所属站点id
     * @return 转账人员库列表信息
     */
    Page<TransferAccountsPeopleListVO> selectPage(TransferAccountsPeopleQuery transferAccountsPeopleQuery, String siteId);

    /**
     * 根据转账人员库id查找
     * @param transferAccountsPeopleId 转账人员库id
     * @param siteId 所属站点id
     * @return 转账人员库
     */
    TransferAccountsPeopleDO selectDOById(String transferAccountsPeopleId, String siteId);

    /**
     * 查询转账人员库
     * @param transferAccountsPeopleQuery 查询条件
     * @param siteId 所属站点id
     * @return 转账人员库列表
     */
    List<TransferAccountsPeopleDO> selectDO(TransferAccountsPeopleQuery transferAccountsPeopleQuery, String siteId);

    /**
     * 根据公司id和身份证号查询转账人员库
     * @param companyId 公司id
     * @param idCard 身份证号
     * @param siteId 所属站点id
     * @return 转账人员库列表
     */
    TransferAccountsPeopleDO selectByCompanyIdAndIdCard(String companyId, String idCard, String siteId);

    /**
     * 根据身份证号查询转账人员库
     * @param idCard 身份证号
     * @param siteId 所属站点id
     * @return 转账人员库列表
     */
    TransferAccountsPeopleDO selectByIdCard(String idCard, String siteId);

    /**
     * H5页面添加数据到人员库（批次id存在时会同时进入批次里面：批次明细信息重复更新批次明细）
     * @param transferAccountsPeopleH5AddDTO H5新增人员库需要的参数
     * @return 1
     */
    int h5SaveData(TransferAccountsPeopleH5AddDTO transferAccountsPeopleH5AddDTO);

    /**
     * 查询租户所有的转账人员
     * @param siteId 所属站点id
     * @return 转账人员库列表
     */
    List<TransferAccountsPeopleDO> selectBySiteId(String siteId);

    /**
     * 扫码录入及添加的时候校验是否允许修改人员库信息
     * @param transferAccountsPeopleDO 久的人员库信息
     * @param name 新的姓名
     * @param phone 新的电话
     * @param zfbIdentity 新的支付宝账号
     * @return 错误原因
     */
    String checkUpdate(TransferAccountsPeopleDO transferAccountsPeopleDO,
                       String name, String phone, String zfbIdentity,
                       String bankCard, String bankName);

    /**
     * 导出转账人员库信息
     *
     * @param transferAccountsPeopleQuery 导出查询参数
     * @param tokenUser                   当前用户
     * @return excel地址
     */
    String exportTransferAccountsPeopleList(TransferAccountsPeopleQuery transferAccountsPeopleQuery, TokenUser tokenUser);

    /**
     * 转账人员库 粘贴选择
     * @param transferAccountsPeopleQuery 查询参数
     * @param tokenUser 当前用户
     * @return 转账人员列表
     */
    TransferAccountsPeoplePasteVO selectByIdCards(TransferAccountsPeopleQuery transferAccountsPeopleQuery, TokenUser tokenUser);


}


